<!DOCTYPE html>
<html lang="zh-CN">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>限速</title>
	</head>
	<body>
		<!--
    用户网速很慢的情况下，我们可以反复地调用 socket.send(data)。但是数据将会缓冲（存储）在内存中，并且只能在网速允许的情况下尽快将数据发送出去。
    socket.bufferedAmount 属性存储了目前已缓冲的字节数，等待通过网络发送。
     -->

		<script>
			// 检查 socket 是否真的可用于传输的示例代码：

			// 每 100ms 检查一次 socket。
			// 仅当所有现有的数据都已发送出去时，再发送更多的数据。
			setInterval(() => {
				if (socket.bufferedAmount == 0) {
					socket.send(moreData())
				}
			}, 100)
		</script>

		<script>
			// 连接关闭：通常，当一方想要关闭连接时（浏览器和服务器都具有相同的权限），它们会发送一个带有数字码和文本形式的原因的 "connection close frame"。
			// 它的方法是：
			socket.close([code], [reason])
			// code 是一个特殊的 WebSocket 关闭码，reason 是一个描述关闭原因的字符串。

			// 例如：
			// 关闭方：
			socket.close(1000, 'Wokr, complete')

			// 另一方：
			socket.onclose = (e) => {
				// e.code === 1000
				// e.reason === "Wokr, complete"
				// e.wasClean === true (clean close)
			}

			// 最常见的数字码: 1000 默认，正常关闭（如果没有指明 code 时使用它），1006 没有办法手动设定这个数字码，表示连接丢失（没有 close frame）。
			// 1001 一方正在离开，例如服务器正在关闭，或者浏览器离开了该页面，1009 消息太大，无法处理，1011 服务器上发生意外错误。
			// ...等等。
		</script>
	</body>
</html>
